home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / MacHacksBug / Python 1.5.2c1 / Mac / Lib / pythonprefs.py < prev    next >
Encoding:
Python Source  |  2000-06-23  |  3.6 KB  |  127 lines

  1. from preferences import *
  2.  
  3. # Names of Python resources
  4. PREFNAME_NAME="PythonPreferenceFileName"
  5.  
  6. # Resource IDs in the preferences file
  7. PATH_ID = 228
  8. DIR_ID = 228
  9. POPT_ID = 228
  10. GUSI_ID = 10240
  11.  
  12. # Override IDs (in the applet)
  13. OVERRIDE_PATH_ID = 229
  14. OVERRIDE_DIR_ID = 229
  15. OVERRIDE_POPT_ID = 229
  16. OVERRIDE_GUSI_ID = 10241
  17.  
  18. # version
  19. CUR_VERSION=4
  20.  
  21. preffilename = PstringLoader(AnyResLoader('STR ', resname=PREFNAME_NAME)).load()
  22. pref_fss = preferencefile(preffilename, 'Pyth', 'pref')
  23.  
  24. class PoptLoader(VersionLoader):
  25.     def __init__(self, loader):
  26.         VersionLoader.__init__(self, "bbbbbbbbbbbb", loader)
  27.         
  28.     def versioncheck(self, data):
  29.         if data[0] == CUR_VERSION:
  30.             return data
  31.         print 'old resource'
  32.         raise Error, "old resource"
  33.         
  34. class GusiLoader:
  35.     def __init__(self, loader):
  36.         self.loader = loader
  37.         self.data = None
  38.         
  39.     def load(self):
  40.         self.data = self.loader.load()
  41.         while self.data[10:14] != '0181':
  42.             self.loader.delete(1)
  43.             self.loader.load()
  44.         tp = self.data[0:4]
  45.         cr = self.data[4:8]
  46.         flags = ord(self.data[9])
  47.         delay = ((flags & 0x20) == 0x20)
  48.         return cr, tp, delay
  49.         
  50.     def save(self, (cr, tp, delay)):
  51.         flags = ord(self.data[9])
  52.         if delay:
  53.             flags = flags | 0x20
  54.         else:
  55.             flags = flags & ~0x20
  56.         newdata = tp + cr + self.data[8] + chr(flags) + self.data[10:]
  57.         self.loader.save(newdata)
  58.         
  59. popt_default_default = NullLoader(chr(CUR_VERSION) + 8*'\0')
  60. popt_default = AnyResLoader('Popt', POPT_ID, default=popt_default_default)
  61. popt_loader = ResLoader(pref_fss, 'Popt', POPT_ID, default=popt_default)
  62. popt = PoptLoader(popt_loader)
  63.  
  64. dir_default = AnyResLoader('alis', DIR_ID)
  65. dir = ResLoader(pref_fss, 'alis', DIR_ID, default=dir_default)
  66.  
  67. gusi_default = AnyResLoader('GU\267I', GUSI_ID)
  68. gusi_loader = ResLoader(pref_fss, 'GU\267I', GUSI_ID, default=gusi_default)
  69. gusi = GusiLoader(gusi_loader)
  70.  
  71. path_default = AnyResLoader('STR#', PATH_ID)
  72. path_loader = ResLoader(pref_fss, 'STR#', PATH_ID, default=path_default)
  73. path = StrListLoader(path_loader)
  74.  
  75. class PythonOptions:
  76.     def __init__(self, popt=popt, dir=dir, gusi=gusi, path=path):
  77.         self.popt = popt
  78.         self.dir = dir
  79.         self.gusi = gusi
  80.         self.path = path
  81.         
  82.     def load(self):
  83.         dict = {}
  84.         dict['path'] = self.path.load()
  85.         diralias = self.dir.load()
  86.         dirfss, dummy = macfs.RawAlias(diralias).Resolve()
  87.         dict['dir'] = dirfss
  88.         dict['creator'], dict['type'], dict['delayconsole'] = self.gusi.load()
  89.         flags = self.popt.load()
  90.         dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \
  91.             dict['unbuffered'], dict['debugging'], dict['keepopen'], dict['keeperror'], \
  92.             dict['nointopt'], dict['noargs'], dict['oldexc'], \
  93.             dict['nosite'] = flags
  94.         return dict
  95.         
  96.     def save(self, dict):
  97.         self.path.save(dict['path'])
  98.         diralias = macfs.FSSpec(dict['dir']).NewAlias().data
  99.         self.dir.save(diralias)
  100.         self.gusi.save((dict['creator'], dict['type'], dict['delayconsole']))
  101.         flags = dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \
  102.             dict['unbuffered'], dict['debugging'], dict['keepopen'], dict['keeperror'], \
  103.             dict['nointopt'], dict['noargs'], dict['oldexc'], \
  104.             dict['nosite']
  105.         self.popt.save(flags)
  106.  
  107. def AppletOptions(file):
  108.     fss = macfs.FSSpec(file)
  109.     a_popt = PoptLoader(ResLoader(fss, 'Popt', OVERRIDE_POPT_ID, default=popt_loader))
  110.     a_dir = ResLoader(fss, 'alis', OVERRIDE_DIR_ID, default=dir)
  111.     a_gusi = GusiLoader(
  112.             ResLoader(fss, 'GU\267I', OVERRIDE_GUSI_ID, default=gusi_loader))
  113.     a_path = StrListLoader(
  114.             ResLoader(fss, 'STR#', OVERRIDE_PATH_ID, default=path_loader))
  115.     return PythonOptions(a_popt, a_dir, a_gusi, a_path)
  116.     
  117. def _test():
  118.     import preferences
  119.     preferences.debug = 1
  120.     dict = PythonOptions().load()
  121.     for k in dict.keys():
  122.         print k, '\t', dict[k]
  123.         
  124. if __name__ == '__main__':
  125.     _test()
  126.     
  127.